//
//  main.m
//  C02_BOOL类型_关系运算符_逻辑运算符_IF_Switch_枚举
//
//  Created by dllo on 15/11/18.
//  Copyright © 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

enum phoneNumber{
      财务 = 8001,
      技术,
      人事,
      后勤
};

int main(int argc, const char * argv[]) {
    
    
#pragma mark - 知识点1 BOOL 数据类型
#if 1
    {

        BOOL result1 = 100;
        printf("%d\n", result1);
        
        bool result2 = 100;
        printf("%d\n", result2);
        
        _Bool result3 = 100;
        printf("%d\n", result3);
        
        /**
         * BOOL 是OC中的类型, bool, _Bool是C中的类型.
         * BOOL 的数值可以是除了0和1其他值
         * bool 和 _Bool 无论赋什么值,结果只有 0 和 1
         */
        
        BOOL isOn = YES;
        printf("isOn = %d\n", isOn);
        
        BOOL isOff = NO;
        printf("isOff = %d\n",isOff);
        
        BOOL isOpen;
        printf("isOpen = %d\n",isOpen);
    }
#endif
#pragma mark ** 课堂练习
    {
    
    }
#pragma mark - 知识点2 关系运算符
#if 0
    {
        /** 
         * >, <, >=, <=, ==, != 
         * 注意: == 是判断是否相等
         *      != 是判断不相等
         *      ! 取反
         */
    }
#endif
#pragma mark **  课堂练习
#if 0
    {
        /** 练习1 
         * i < j < k 结果
         * 如果 i = 3, j = 4, k = 5;
         * 如果 i = 4, j = 4, k = 5;
         */
        int i = 3, j = 4, k = 5;
        BOOL result = i < j < k;
        printf("result = %d\n",result);
        
        int i1 = 4,j1 = 4, k1 = 5;
        bool result1 = i1 < j1 < k1;
        printf("result1 = %d\n",result1);
    }
#endif
#pragma mark -  知识点3 逻辑运算符
    {
        /** 
         * &&, ||, !
         * && 逻辑与.两边表达式都为真,整个表达式结果才为真
         * || 逻辑或.两边表达式都为假,整个表达式结果才为假
         * 注意 短路问题 详见练习
         *
         */
    }
#pragma mark ** 课堂练习
#if 0
    {
        /**
        * 练习1:
        * 3>5 && 4<6  整个表达式结果?
        * 3<5 && 4<6  整个表达式结果?
        * 3==5 || 3<5 表达式的结果?
        * !0 结果?
        * !-1 结果?
        */
        BOOL result1 = 3 > 5 && 4 < 6;  /**< 里边有短路问题 */
        printf("result1 = %d\n",result1);
        
        BOOL result2 = 3 < 5 && 4 < 6;
        printf("result2 = %d\n",result2);
        
        BOOL result3 = 3==5 || 3 < 5;
        printf("result3 = %d\n",result3);
        
        /**
         * 输入一个整数,判断这个数是否在30到70的范围之间
         */
        int number = 0;
        printf("输入一个整数:");
        scanf("%d", &number);
        BOOL result4 = number > 30 && number < 70;
        printf("result4 = %d\n", result4);
        
    }
#endif
#pragma mark - 知识点4 if语句, if else, 级联式if语句
    {
#if 0
        if (条件1) {
            语句1;
        } else if (条件2) {
            语句2;
        } else {
            语句3;
        }
#endif
    }
#pragma mark ** 课堂练习
    {
#if 0
    /** 控制台输入字符, 如果是m输出男性,否则什么都不输出 */
        char sex = 0;
        printf("请输入一个字符:");
        scanf("%c", &sex);
        if ('m' == sex) {
            printf("male\n");
        }
#endif
#if 0
        /** 输入一个 年份，判断该年份是否是闰年？如果是闰年，则输出该年是闰年，否则输出该年不是闰年
         (提示：闰年：能被400整除或者能被4整除，但是不能被100整除。) */
        int year = 0;
        printf("请输入一个年份:");
        scanf("%d", &year);
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            printf("该年是闰年\n");
        } else {
            printf("该年不是闰年\n");
        }
#endif
#if 0
        /** 控制台输入两个整数，找出最大值 */
        int a;
        int b;
        printf("请输入两个数:");
        scanf("%d%d", &a, &b);
        if (a <= b) {
            printf("两个数的最大值是%d\n", b);
        } else {
            printf("两个数的最大值是%d\n", a);
        }
#endif
#if 0
        /**判断输入的数字（1~100）是否是7的倍数，是否包含7。（很多学员对%和/的作用运用不好，比如%可以判断倍数，还可以取出数字的位 */
        int number = 1;
        printf("请输入一个1~100的数字:");
        scanf("%d", &number);
        if (number % 7 == 0 || number % 10 == 7 || number / 10 == 7) {
            printf("符合条件\n");
        }
#endif
#if 0
        /**控制台输入字符m(男)、f（女）,m输出男性，f输出女性。如果即没有输入'm'，又没有输入'f'，性别是什么呢？*/
        char sex = 0;
        printf("请输入一个字符:");
        scanf("%c", &sex);
        if ('m' == sex) {
            printf("男性\n");
        } else if ('f' == sex){
            printf("女性\n");
        } else {
            printf("无效输入\n");
        }
#endif
#if 0
        /** 从键盘输入一个字符，如果是数字打印 this is digital，如果是大写字母，打印 this is  capital letter，如果是小写字母，打印 this is letter，如果是其他字符，打印 other */
        char a = 0;
        printf("请输入一个字符:");
        scanf("%c", &a);
        if ( a >= '0' && a <= '9') {
            printf("this is digital\n");
        } else if(a >= 'A' && a <= 'Z'){
            printf("this is  capital letter\n");
        } else if (a >= 'a' && a <= 'z'){
            printf("this is letter\n");
        } else {
            printf("other\n");
        }
#endif
    }
#pragma mark - 知识点5 条件运算符
    {
        /**
         * ?:
         * a > b ? a : b
         * 如果a > b,结果为a,否则结果为b
         */
    }
#pragma mark ** 课堂练习
#if 0
    {
        /** 控制台输入三个整数，找出最大值 */
        int a = 0;
        int b = 0;
        int c = 0;
        int max = 0;
        printf("请输入三个整数:");
        scanf("%d%d%d", &a, &b, &c);
        max = a > b ? a : b;
        max = max > c ? max : c;
        printf("max = %d\n", max);
    }
#endif
#pragma mark -  知识点6 switch 语句
    {
#if 0
        switch (整型表达式) {
            case 值1:
            语句1;
                break;
            
        case 值2:
            语句2;
            break;
            
            default:
            语句3;
                break;
        }
#endif
    
    }
#pragma mark ** 课堂练习
    {
#if 0
        /** 从控制台输入1~4,对应打印出春夏秋冬的英文单词 */
        int number = 0;
        printf("请输入1~4数字:");
        scanf("%d", &number);
        switch (number) {
            case 1:
                printf("Spring\n");
                break;
            case 2:
                printf("Summer\n");
                break;
            case 3:
                printf("Autumn\n");
                break;
            case 4:
                printf("Winter\n");
                break;
            default:
                printf("input error!\n");
                break;
        }
#endif
#if 0
        /** 分机号, 输入分机号显示输出相应的部门 
         *  8001 柳董
         *  8002 技术部
         *  8003 人事
         *  8004 办公室
         *  8005 后勤部
         *  其他号码提示无此号,重新输入
         */
        int iphoneNumber = 0;
        printf("请输入分机号:");
        scanf("%d", &iphoneNumber);
        switch (iphoneNumber) {
            case 8001:
                printf("柳董\n");
                break;
            case 8002:
                printf("技术部\n");
                break;
            case 8003:
                printf("人事部\n");
                break;
            case 8004:
                printf("办公室\n");
                break;
            case 8005:
                printf("后勤部\n");
                break;
            default:
                printf("无此号,重新输入!\n");
                break;
        }
#endif
    }
#pragma mark - 知识点7 枚举类型 enum
    {
#if 0
        /**
         * 枚举是一种数据类型,类似:char, int
         */
        enum season {
            spring,
            summer,
            autumn,
            winter
        };
        /** 定义一个枚举变量 */
        enum season s = 0;  /** enum season 相当于 int */
        printf("请输入一个0~3的整数:");
        scanf("%d", &s);
        switch (s) {
            case spring:
                printf("春天到啦!\n");
                break;
            case summer:
                printf("夏天到啦!\n");
                break;
            case autumn:
                printf("秋天到啦!\n");
                break;
            case winter:
                printf("冬天到啦!\n");
                break;
            default:
                break;
        }
#endif
    }
#pragma mark ** 课堂练习
    {
#if 0
        /** 定义一个枚举变量 */
        enum phoneNumber phone = 0;
        printf("请输入电话号码:");
        scanf("%d", &phone);
        switch (phone) {
            case 财务:
                printf("财务\n");
                break;
            case 技术:
                printf("技术\n");
                break;
            case 人事:
                printf("人事\n");
                break;
            case 后勤:
                printf("后勤\n");
                break;
            default:
                break;
        }
#endif
    
    }
    
  

    return 0;
}
